package 剑指Offer._5160;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/11/20 16:20
 * 左旋转字符串
 * 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。
 * 比如，输入字符串"abcdefg"和数字2，该函数将返回左旋转两位得到的结果"cdefgab"。
 * 算法：字符串
 */
public class _58II {
    public static void main(String[] args) {
        String s = "123";
        System.out.println(s.substring(0, 1));
        System.out.println(s);
    }

    public String reverseLeftWords(String s, int n) {
        return s.substring(n) + s.substring(0, n);
    }

    /**
     * 将 n 之前的字符串和之后的字符串都翻转
     * 再次翻转上一步翻转后的字符串
     * @param s
     * @param n
     * @return
     */
    public String reverseLeftWords_perfect(String s, int n) {
        StringBuilder sb = new StringBuilder(s);
        reverse(sb, 0, n - 1);
        reverse(sb, n, s.length() - 1);
        reverse(sb, 0, s.length() - 1);
        return sb.toString();
    }
    void reverse(StringBuilder sb, int s, int e) {
        while (s < e) {
            char tmp = sb.charAt(s);
            sb.setCharAt(s, sb.charAt(e));
            sb.setCharAt(e, tmp);
            ++s;
            --e;
        }
    }


}
